const express = require('express');
const axios = require('axios');
const cors = require('cors');
const app = express();
const PORT = process.env.PORT || 3000;

// 配置 cors 和 JSON 解析
app.use(cors({ origin: true }));
app.use(express.json());

// 存储提供商的 API 信息（在实际部署中，这些应该存储在环境变量中）
const PROVIDER_CONFIGS = {
  volcengine: {
    apiKey: process.env.VOLCENGINE_API_KEY,
    apiUrl: 'https://ark.cn-beijing.volces.com/api/v3',
    apiVersion: 'doubao-vision-lite-32k-241015'
  },
  alibaba: {
    apiKey: process.env.ALIBABA_API_KEY,
    apiUrl: 'https://dashscope.aliyuncs.com/compatible-mode/v1',
    apiVersion: 'qwen-max'
  },
  tencent: {
    apiKey: process.env.TENCENT_API_KEY,
    apiUrl: 'https://api.hunyuan.cloud.tencent.com/v1',
    apiVersion: 'hunyuan-turbo'
  }
};

// 验证请求的路由
app.post('/api/validate', (req, res) => {
  // 这里可以添加一些验证逻辑，比如检查用户凭证
  // 成功时返回一个临时 token
  const token = generateTemporaryToken();
  res.json({ success: true, token });
});

// AI 请求的代理路由
app.post('/api/proxy', async (req, res) => {
  try {
    const { provider, message, questionContext, token } = req.body;
    
    // 验证 token
    if (!isValidToken(token)) {
      return res.status(401).json({ error: 'Invalid token' });
    }
    
    // 获取对应提供商的配置
    const config = PROVIDER_CONFIGS[provider];
    if (!config) {
      return res.status(400).json({ error: 'Invalid provider' });
    }
    
    // 根据提供商构建请求
    const response = await makeProviderRequest(
      config.apiUrl,
      config.apiKey,
      config.apiVersion,
      message,
      questionContext
    );
    
    // 返回结果
    res.json(response);
  } catch (error) {
    console.error('API proxy error:', error);
    res.status(500).json({ error: 'API request failed', message: error.message });
  }
});

// 启动服务器
app.listen(PORT, () => {
  console.log(`Proxy server running on port ${PORT}`);
});

// 辅助函数
function generateTemporaryToken() {
  // 生成一个简单的临时 token（实际应用中应该更复杂且有过期时间）
  return `temp_${Date.now()}_${Math.random().toString(36).substring(2, 15)}`;
}

function isValidToken(token) {
  // 验证 token 的有效性（示例）
  return token && token.startsWith('temp_');
}

async function makeProviderRequest(apiUrl, apiKey, apiVersion, message, questionContext) {
  // 根据不同提供商构建不同的请求（示例实现）
  const headers = {
    'Content-Type': 'application/json',
    'Authorization': `Bearer ${apiKey}`
  };
  
  const data = {
    messages: [
      { role: 'system', content: `题目上下文: ${questionContext}` },
      { role: 'user', content: message }
    ],
    model: apiVersion
  };
  
  const response = await axios.post(apiUrl, data, { headers });
  return response.data;
} 